package com.yidiandao.business.ui.main.shoppingcart.choosegift;

import android.os.Bundle;

import com.yidiandao.business.constant.Intents;
import com.yidiandao.business.data.bean.FavourableInfo;
import com.yidiandao.business.data.bean.Goods;
import com.yidiandao.business.data.event.RefreshShoppingCartEvent;
import com.yidiandao.business.manager.GiftManager;
import com.yidiandao.business.ui.widget.listview.DisplayListItem;
import com.yidiandao.business.ui.widget.listview.displaylistitem.ChooseGiftSingleListItem;
import com.yidiandao.business.ui.widget.listview.displaylistitem.ChooseGiftTitleListItem;

import org.greenrobot.eventbus.EventBus;

import java.util.ArrayList;
import java.util.List;

/**
 * 换购商品-Presenter
 */
public class ChooseGiftPresenter implements ChooseGiftContract.Presenter {

    private ChooseGiftContract.View mChooseGiftView;

    /**
     * 当前的赠品/加价购商品列表
     */
    private List<Goods> mGiftList;

    /**
     * 当前的赠品/加价购商品信息
     */
    private FavourableInfo mFavourableInfo;

    /**
     * 当前选中的赠品
     */
    private Goods currentChooseGift;

    public ChooseGiftPresenter(ChooseGiftContract.View view) {
        mChooseGiftView = view;
        mChooseGiftView.setPresenter(this);
    }

    @Override
    public void start() {
    }

    @Override
    public void extraBundle(Bundle bundle) {

        List<DisplayListItem> displayListItems = new ArrayList<>();

        // 通过act_id获取 商品的满赠/加价购活动信息
        String actId = bundle.getString(Intents.EXTRA_ACT_ID);
        mFavourableInfo = GiftManager.getInstance().getFavourableInfoByActId(actId);

        // 默认选择的赠品
        // 从购物车页面过来时，默认UI显示
        currentChooseGift = mFavourableInfo.getChooseGift();
        mChooseGiftView.setChooseGiftCount(
                currentChooseGift == null ? 0 : currentChooseGift.getGoodsNumber());

        // 刷新赠品列表
        // 标题
        String content = mFavourableInfo.getContent();
        displayListItems.add(new ChooseGiftTitleListItem(content));

        // 赠品列表
        mGiftList = mFavourableInfo.getGiftList();
        for (Goods gift : mGiftList) {

            // 默认从购物车页面过来时，赠品是否选中根据购物车中显示的赠品来决定
            gift.setSelected(gift.equals(currentChooseGift));

            ChooseGiftSingleListItem giftListItem = new ChooseGiftSingleListItem(gift);
            displayListItems.add(giftListItem);
        }

        mChooseGiftView.setDisplayListItems(displayListItems);
    }

    @Override
    public void onItemClick(ChooseGiftSingleListItem item) {

        // 当前点击的赠品
        Goods clickGift = item.getContentData();

        if (clickGift.getCanChoose() != FavourableInfo.CAN_CHOOSE) {
            // 如果不能选择，则告知用户未达到条件，无法选择
            // 不再向下执行,保存为上一次的状态
            mChooseGiftView.showToast(clickGift.getGiftError());
            return;
        }

        // 遍历赠品列表
        for (Goods goods : mGiftList) {

            // 如果当前遍历的赠品是当前点击的
            if (clickGift.equals(goods)) {
                // 判断赠品是否可以选择
                if (clickGift.getGoodsPrice() == 0) {

                    // **** 赠品 ****
                    // 如果赠品不需要 money ，不实现反选，
                    if (clickGift.getCanChoose() == FavourableInfo.CAN_CHOOSE) {

                        clickGift.setSelected(true);

                        // 设置为当前选中的赠品
                        currentChooseGift = clickGift;
                    }

                } else {
                    // **** 加价购 ****
                    // 如果赠品需要 money ---> 加价购 ，则实现反选功能
                    if (clickGift.getCanChoose() == FavourableInfo.CAN_CHOOSE) {
                        // 加价购
                        clickGift.setSelected(!clickGift.isSelected());

                        if (clickGift.isSelected()) {
                            // 设置为当前选中的赠品
                            currentChooseGift = clickGift;
                        } else {
                            // 反选赠品
                            currentChooseGift = null;
                        }
                    }
                }
            } else {
                // 默认清空选择的其他赠品
                goods.setSelected(false);
            }
        }

        mChooseGiftView.notifyDataSetChanged();
        // 刷新选择的赠品数量UI
        mChooseGiftView.setChooseGiftCount(
                currentChooseGift == null ? 0 : currentChooseGift.getGoodsNumber());
    }

    @Override
    public void onConfirmChoose() {

        // 设置选中的赠品
        mFavourableInfo.setChooseGift(currentChooseGift);

        // 刷新购物车UI
        postRefreshShoppingCartStateEvent();

        mChooseGiftView.finishActivity();
    }

    @Override
    public void postRefreshShoppingCartStateEvent() {
        RefreshShoppingCartEvent event = new RefreshShoppingCartEvent();
        event.setFromChooseGiftActivity(true);
        EventBus.getDefault().post(event);
    }
}
